package com.common.www.service.project;

import cn.jiguang.common.utils.StringUtils;
import org.springframework.boot.base.jpa.service.BaseLogicService;
import com.common.www.bean.entity.project.GaoCeng;
import com.common.www.repository.project.GaoCengRepository;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.lang.reflect.Field;


@Service
@Transactional
public class GaoCengService extends BaseLogicService<GaoCeng, Long> {

    @Autowired
    private GaoCengRepository repository;
    @Autowired
    private ProjectService projectService;

    @Override
    public GaoCengRepository getRepository() {
        return repository;
    }

    /**
     * 保存
     *
     * @param gaoCeng
     * @return
     */
    public GaoCeng saveInfo(GaoCeng gaoCeng) {
        // 使用反射检查所有属性是否都为空
        if (allFieldsAreNotEmpty(gaoCeng)) {
            return null;
        }
        if (gaoCeng.getId() == null) {
            repository.saveAndFlush(gaoCeng);
            return gaoCeng;
        } else {
            // 如果 id 不为空，则从数据库中获取现有对象
            GaoCeng existing = getByIdLogic(gaoCeng.getId());
            if (existing != null) {
                // 如果存在，则更新现有对象的属性
                BeanUtils.copyProperties(gaoCeng, existing, "id");
                // 然后保存更新后的对象
                repository.saveAndFlush(existing);
            }
            return existing;
        }
    }

    /**
     * 判断是否为空
     *
     * @param gaoCeng
     * @return
     */
    private boolean allFieldsAreNotEmpty(GaoCeng gaoCeng) {
        // 获取对象的所有字段
        Field[] fields = gaoCeng.getClass().getDeclaredFields();
        try {
            for (Field field : fields) {
                // 设置可访问私有字段
                field.setAccessible(true);
                // 判断字段值是否为空或空字符串
                Object value = field.get(gaoCeng);
                if (value != null && StringUtils.isNotEmpty(value.toString())) {
                    // 只要有一个字段不为空，则返回false
                    return false;
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        // 所有字段都为空，返回true
        return true;
    }

}